// 双指针法

// 每次选择左右指针中高度较小的一侧（ height[left] < height[right] ）移动
// 确保另一侧有更高的边界（由 leftMax 或 rightMax 记录）
// 从而保证当前位置能接住的水量由较低的一侧的最大高度决定

function trap(height) {
  let left = 0, right = height.length - 1;
  let leftMax = 0, rightMax = 0;
  let totalWater = 0;

  // 当左右指针未相遇时循环
  while (left < right) {
    // 左指针当前高度 < 右指针当前高度 → 处理左指针
    if (height[left] < height[right]) {
      if (height[left] >= leftMax) {
        leftMax = height[left];
      } else {
        totalWater += leftMax - height[left];
      }
      left++;
    } else {
      // 右指针当前高度 ≤ 左指针当前高度 → 处理右指针
      if (height[right] >= rightMax) {
        rightMax = height[right];
      } else {
        totalWater += rightMax - height[right];
      }
      right--;
    }
  }

  return totalWater;
}